﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using ControlStock.Dominio;
using System.Data;

namespace ControlStock.Repositorio
{
    public class DepositoRepositorio
    {
        Conexion Conn;

        public DepositoRepositorio()
        {
            Conn = new Conexion();
        
        }

        public int Agregar(Depositos deposito)
        {
            String Consulta = "Insert into DEPOSITO(Dep_Ubicacion, Dep_Estado, Dep_Telefono)";
            Consulta += " Values ('" + deposito.Ubicacion_Dep + "'," + (deposito.Estado_Dep ? 0 : 1) + " ," + deposito.Telefono_Dep + " ) Select @@Identity ";
            return Conn.Insertar(Consulta);
        
        }

        public void Modificar(Depositos deposito)
        { 
            String Consulta = "Update Deposito set Dep_Ubicacion = '" + deposito.Ubicacion_Dep + "', Dep_Estado = " +(deposito.Estado_Dep ? 0 : 1 )+", Dep_Telefono = "+ deposito.Telefono_Dep +" Where Dep_Id = "+ deposito.Id_Dep +"";
            Conn.ModificarEliminar(Consulta);

        }

        public Depositos Buscar(int idDeposito, string tipousu)
        {
            String Consulta = " Select * From Deposito Where Dep_Id = " + idDeposito;
            DataRow Fila = Conn.Buscar(Consulta).Rows[0];
            return this.Mapear(Fila,tipousu);
        }

        public List<Depositos> Listar(string tipousu)
        {
            String Consulta = "select * from DEPOSITO ";
            DataTable TablaDepositos  = Conn.Buscar(Consulta);
            List<Depositos> ListaDeposito = new List<Depositos>();
            foreach (DataRow Fila in TablaDepositos.Rows)
            {
                ListaDeposito.Add(this.Mapear(Fila,tipousu));
            }

            return ListaDeposito;
                  
        }

        public List<Depositos> Listar(int idArticulo,string tipousu)
        {
            String Consulta = "select D.*, DA.Cantidad, A.Art_Id from DEPOSITO D inner join DEPOSITO_ARTICULO DA on D.Dep_Id = DA.Dep_Id inner join ARTICULO A on DA.Art_Id = A.Art_Id Where A.Art_Id = " + idArticulo;
            DataTable TablaDepositos = Conn.Buscar(Consulta);
            List<Depositos> ListaDeposito = new List<Depositos>();
            foreach (DataRow Fila in TablaDepositos.Rows)
            {
                ListaDeposito.Add(this.Mapear(Fila,tipousu));
            }

            return ListaDeposito;

        }



        public Depositos Mapear(DataRow Fila,string tipousu)
        {
            Depositos Deposito_map = null;
            if (Fila != null)
            {
                Deposito_map = new Depositos();
                Deposito_map.Id_Dep = Fila.IsNull("Dep_Id") ? 0 : Convert.ToInt32(Fila["Dep_Id"]);
                Deposito_map.Ubicacion_Dep = Fila.IsNull("Dep_Ubicacion") ? "" : Fila["Dep_Ubicacion"].ToString();
                Deposito_map.Estado_Dep = Fila.IsNull("Dep_Estado") ? false : Convert.ToBoolean(Fila["Dep_Estado"]);
                Deposito_map.Telefono_Dep = Fila.IsNull("Dep_Telefono") ? 0 : Convert.ToInt64(Fila["Dep_Telefono"]);
                ArticuloRepositorio artRepo = new ArticuloRepositorio();
                if (Fila.Table.Columns.Contains("Art_Id"))
                {
                    Deposito_map.Lista_Articulos_Cantidad = new Dictionary<Articulos, int>();
                    //Reparar
                    Articulos art = artRepo.Buscar(Fila.IsNull("Art_Id") ? 0 : Convert.ToInt32(Fila["Art_Id"]),tipousu);
                    Deposito_map.Lista_Articulos_Cantidad.Add(art, Fila.IsNull("Cantidad") ? 0 : Convert.ToInt32(Fila["Cantidad"]));
                }
             }
            return Deposito_map;
        
        }
    }
}

